iT邦幫忙

2023 iThome 鐵人賽

DAY 12
0

昨天已經介紹dplyr套件中基本且常用的函數,如:select()filter()...,今天要來介紹另一個常用的函數summarise()summarise()常會與group_by()做搭配,可以針對分組後的資料進行組內數據計算。

下方我們一樣使用前一天的銷售數據做舉例:

# 載入套件
library(dplyr)
day12 = data.frame(
                  customer_id = c(1,1,1,1,2,2,2,3,3),
                  item = c("milk", "apple", "cookie", "mug", 
                           "mug", "milk", "milk", 
                           "apple", "cookie"),
                  price = c(10, 12, 7, 20, 10, 10, 12, 7, 2),
                  count = c(2, 3, 4, 4, 2, 1, 2, 3, 2)
)

# 原始資料
day12
  customer_id   item price count
1           1   milk    10     2
2           1  apple    12     3
3           1 cookie     7     4
4           1    mug    20     4
5           2    mug    10     2
6           2   milk    10     1
7           2   milk    12     2
8           3  apple     7     3
9           3 cookie     2     2
  • 統計每個客戶累積的消費金額
# 先計算每次的購買金額(數量*單價)
day12 = day12 %>% mutate(total_cost = price*count)

# 根據客戶id計算累積消費金額
day12 %>% group_by(customer_id) %>% summarise(cumulate_cost = sum(total_cost))
  customer_id cumulate_cost
1           1           164
2           2            54
3           3            25
  • 統計每個客戶消費次數
    如果大家有仔細看上一篇的話,會發現上一篇也有介紹到消費次數的統計,但我們用的是mutate()這個函數,使用mutate()的時候,資料的維度不會縮減,且只會增加新欄位,但使用summarise()的時候,維度有可能會縮減,且欄位只會留下我們新增的,下面就讓大家看一下兩種寫法的差異
# 使用mutate(),所有原始資料欄位都還在
day12 %>% group_by(customer_id) %>% mutate(times = n())

  customer_id item   price count total_cost     n
1           1 milk      10     2         20     4
2           1 apple     12     3         36     4
3           1 cookie     7     4         28     4
4           1 mug       20     4         80     4
5           2 mug       10     2         20     3
6           2 milk      10     1         10     3
7           2 milk      12     2         24     3
8           3 apple      7     3         21     2
9           3 cookie     2     2          4     2

# 使用summarise(),只會留下group_by()所使用以及新增的欄位
day12 %>% group_by(customer_id) %>% summarise(times = n())

  customer_id times
1           1     4
2           2     3
3           3     2

這樣大家應該清楚兩者的差異了,summarise()中可以針對資料分組後做各種處理,上方只舉了常見的加總、計數,另外還有像是計算平均值、計算最大值...等,dplyr套件介紹就告一段落。
明天會來講解,當我們有兩組(或以上)的資料要做合併的時候該怎麼處裡


上一篇
[Day 11] R語言dplyr套件介紹(1)
下一篇
[Day 13] R語言data frame合併(join, merge)
系列文
30天成為資料分析師-手把手R語言與資料分析教學30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言